/// 计算在一群人中，至少有两个人在同一天过生日的概率
///
/// # 参数
/// - `n`: 输入的数字，表示人数
///
/// # 返回
/// 返回一个浮点数，表示至少有两个人在同一天过生日的概率
pub fn new_birthday_probability(n: u32) -> f64 {
    // 检查输入的人数是否小于2，若是，返回0.0
    if n < 2 {
        return 0.0; // 至少需要两个人才能计算概率
    }

    // 设定一年中的天数
    let total_days = 365;
    if n > total_days {
        // 如果人数大于365，返回1.0
        return 1.0; // 由于人数超过了一年的天数，所以一定至少有两个人会在同一天过生日
    }

    // 初始化没有共享生日的概率为1.0
    let mut prob_no_shared_birthday = 1.0;

    // 遍历每个人，计算没有共享生日的概率
    for i in 0..n {
        // 计算第 i 个人的生日选择
        // (total_days - i) 表示在已选择的生日中，可以选择的剩余天数
        // total_days 表示总的天数
        prob_no_shared_birthday *= ((total_days - i) as f64) / total_days as f64;
    }

    // 计算至少有两个人在同一天过生日的概率
    // 该概率等于1减去没有人共享生日的概率
    let prob_shared_birthday = 1.0 - prob_no_shared_birthday;

    // 保留四位小数
    (prob_shared_birthday * 10000.0).round() / 10000.0
}

// 这是一个经典的概率问题，被称为生日悖论，计算所需条件的补集概率即可。